home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’93 / sort / Source / binary_insert.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-15  |  928 b   |  44 lines  |  [TEXT/MPS ]

  1. #include "sortdata.h"
  2.  
  3. void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag);
  4.  
  5. void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag)
  6. {
  7.     long outer, index, oldindex, high, low, endcount, *pindex, *pouter;
  8.  
  9.     pouter = &sortdata[1];
  10.     for (outer=1; outer < maxdata; outer++, pouter++) {
  11.         low = 0 ;
  12.         high = outer;
  13.         index = -1;
  14.         do {
  15.             oldindex = index;
  16.             index = ((high - low) >> 1) + low;
  17.             if (index != oldindex) {
  18.  
  19.                 if (*stopflag) {
  20.                     return;
  21.                 }
  22.  
  23.                 if ((*cm)(outer, index, *pouter, sortdata[index]) < 0) {
  24.                       high = index;
  25.                   }
  26.                   else {
  27.                       low = index;
  28.                   }
  29.             }
  30.         } while (oldindex != index);
  31.  
  32.         if (high != outer) {
  33.             endcount = low;
  34.               if (*pouter > sortdata[low]) {
  35.                   endcount++;
  36.               }
  37.               pindex = pouter;
  38.               for (index = outer; index > endcount; index--, pindex--) {
  39.                 (*sw)(index, index -1, pindex, pindex -1);
  40.             }
  41.         }
  42.     }
  43. }
  44.